iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
自我挑戰組

go go let's go - golang 從0開始系列 第 6

Golang 切片slice與Map

  • 分享至 

  • xImage
  •  

Golang

切片(Slice)
我看很多中文的教學都是翻切片,我也不知道是不是正確的說法,總之也附上英文的單詞了,就GOGO吧!

還記得前一篇宣告陣列的時候,我們會使用var n [10]int 給陣列一個長度,跟某些語言不同的是 陣列一旦宣告後就無法改變長度了,所以此時如果有這個需求的話,就需要試看看Slice

如果忘記的,代表前篇連打三次還是不夠的

Slice是可以動態改變長度的,make() 函数来創建切片並且使用append來增加

package main

import "fmt"

func main() {
/*
   var n [10]int 
   var i int
   

   //這裡會出事,因為我們宣告10,但給了11  
   //runtime error: index out of range [10] with length 10  
   for i = 0; i < 11; i++ {
      n[i] = i 
       fmt.Printf("this is slice %d \n" , n[i])
   }
*/
    fmt.Printf("this is slice \n")
    slice := make([]int, 5)
 
    for i := 0; i < len(slice); i++ {
        
        slice[i] = i
	 fmt.Printf("this is slice %d \n" , slice[i])
    }
    slice = append(slice, 5, 6, 7)
    fmt.Printf("this is slice %d \n" , slice[5])
}

Len()與cap()
len()是長度,cap() 是最大長度

fmt.Println(len(slice))
fmt.Println(cap(slice))

宣告時,slice :=make([]int,len,cap)

Copy
copy(slice2, slice)與slice2:= slice 這兩者是不同的唷,可以玩看看之間的差異。
試看看

copy(slice2, slice)
slice = append(slice, 5, 6, 7)

slice2:= slice
slice = append(slice, 5, 6, 7)

這樣輸出看slice2,看會有怎樣的結果

Map (集合)

package main

import "fmt"

func main() {

fmt.Println("try map")

//建立一個型別為 map 的變數m,其中的 key 都會是 string,value 都是 int
 m := make(map[string]int)
 m["Tom"] = 16
 m["Many"] = 20
    for k, v := range m {
        fmt.Println(k, "value is", v)
    }

}

Len與delete
顧名思義,一樣可以取得長度,如果要刪除的話就使用delete就可以囉~

fmt.Println(len(m)) // 2
delete(m, "Tom")
fmt.Println(len(m)) // 1

另外golang還有一個很類似的東西是Structure,就看未來有沒有時間補了(大致上就是可以裡面的屬性可以不同)

快樂的時間總是快得特別快 又到了說掰的時候啦!


上一篇
Golang 迴圈與陣列
下一篇
function
系列文
go go let's go - golang 從0開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言